#include <argp.h>


/**Versão do programa*/
const char * argp_program_version = "Trabalho 3 de Transmissao de Dados - Versão 0.1";
/**A quem reclamar se o programa der defeito...*/
const char * argp_program_bug_address = 
"<kageken.kurohi@gmail.com>,<thiago.melo.stuckert@gmail.com>";
/**Pequena descrição do programa*/
static char doc[] ="Trabalho 2 de Transmissão de Dados --UDP Pinger - Client";
/** Os argumentos obrigatórios que o programa recebe.
 */
static char args_doc[] = " [IP_SERVIDOR] [PORTA]";	

/*!@brief Argumentos que o programa recebe*/
struct arguments{
	char *args[2];                
    uint32_t number_of_pings;
};

static struct argp_option options[] = {
    {"number_of_pings",'c',"N", 0, "Quantidade de pings a serem emitidos." },
	{0}
};

/*!@brief Parser a ser utilizado internamente para os argumentos passados 
 * pela linha de comando
 * 
 */
static error_t parse_opt (int key, char *arg, struct argp_state *state){
	struct arguments * arguments = state->input;
	switch (key){
		case 'c':
			arguments->number_of_pings = atoi(arg);
		break;
		case ARGP_KEY_ARG:
			/*Muitos argumentos!*/
			if (state->arg_num >= 2){
            	argp_state_help(state,stdout,ARGP_HELP_STD_HELP);
    		}
			else{
				arguments->args[state->arg_num] = arg;
			} 
		break;
     	case ARGP_KEY_END:
           /*Poucos argumentos!*/
            if (state->arg_num < 2){
           		argp_state_help(state,stdout,ARGP_HELP_STD_HELP);
   			}        
       	break;
		default:
        	return ARGP_ERR_UNKNOWN;
	}
	return 0;
}

/*!@brief Struct com os elementos a serem passados para a função 
 * arg_parse. Contém as opções disponíveis, uma documentação breve e
 * o parser
 */

static struct argp argp = { options, parse_opt, args_doc, doc };
int main(void){
     struct arguments arguments;
            
        arguments.number_of_pings = 10;
	argp_parse(&argp,argc,argv,0,0,&arguments);	
        
}